package com.sumer.jvolatile;

import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;

public class Volatile原子性Test {

    // private volatile static int num = 0;
    private static AtomicInteger num = new AtomicInteger(0);

    /**
     * 加上synchronized，能正确得到20000这个值
     */
    public static void add(){
        // num ++;// 这不是原子操作
        num.getAndIncrement();
    }

    public static void main(String[] args) {
        for (int i = 0; i < 20; i++) {
            new Thread(()->{
                for (int i1 = 0; i1 < 1000; i1++) {
                    add();
                }
            }).start();
        }
        try {
            TimeUnit.SECONDS.sleep(5);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 理论值应该是20000，实际上不到20000，加上volatile也不到两万
        System.out.println(num);
    }
}
